﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Runtime.CompilerServices;
using System.Diagnostics;
//Librerias Arquitectura
using Com.Binaria.Core;
using Com.Binaria.Core.Base;
using Com.Binaria.Core.Dto;
using Com.Binaria.Core.Util;
using Com.Binaria.Core.Datos;
using Com.Binaria.Core.Exceptions;
using Com.Binaria.Core.Enumeracion;
//Librerias Proyecto
using Com.Binaria.SISCOB.Funcional.DTO;
using Com.Binaria.SISCOB.DTO;
using Com.Binaria.SISCOB.DAO;

namespace Com.Binaria.SISCOB.Dom
{
/// <summary>
///	clase de sucursal dom
/// </summary>
public partial class SucursalDom : ISucursalDom
{
	#region metodos publicos

	
	
    /// <summary>
    /// metodo que permite registrar elementos de tipo sucursal en el sistema
    /// </summary>
    /// <param name="p_Contexto">informacion del contexto</param>
    /// <param name="p_Sucursal">sucursal a registrar (insertar, actualizar o eliminar)</param>
    /// <param name="p_Accion">Accion a realizar</param>
    public SucursalDTO ProbarRegistrar(ContextoDTO p_Contexto, SucursalDTO p_Sucursal)
	{
        //Prefijo del Metodo
        const String MPREFIX = " [ProbarRegistrar]";
        //Resultado accion insertar
        List<SucursalDTO> listSucursalResultDTO = null;
        //SucursalDTO sucursalResultDTO = null;

        try
        {
            //Registro log de inicio del proceso
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Inicio);

            //Valida que exista informacion en el objeto
            AssertNull.notNullOrEmpty(p_Sucursal);

            listSucursalResultDTO = BuscarSucursalFiltro(p_Contexto, new SucursalDTO() { Descripcion = p_Sucursal.Descripcion });
            if (listSucursalResultDTO.Count == 0)
            {
                listSucursalResultDTO = RegistrarSucursal(p_Contexto, new List<SucursalDTO>() { p_Sucursal }, EnumRegistrarAccion.Agregar);
            }
            else
            {
                p_Sucursal.Id = listSucursalResultDTO[0].Id;
                listSucursalResultDTO = new List<SucursalDTO>();
                listSucursalResultDTO.Add(p_Sucursal);

            }

            //Registro log de ejecucion el termino del metodo
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Termino);
        }
        catch (ManagerException me)
        {
            throw (me);
        }
        catch (ArquitecturaException ae)
        {
            throw (ae);
        }
        catch (Exception ex)
        {
            //Registro log de ejecucion con problemas
            Factoria.Log.Info(CLASS_PREFIX + MPREFIX + EnumMessagesEntry.Ejecucion_Problemas);
            //Genero error
            throw new ManagerException(Factoria.GetMessage("DOM_ERROR_NO_MANEJADO"), ex);
        }
        return listSucursalResultDTO[0];
    }	
    #endregion metodos publicos

	}//End class SucursalDom
}//End namespace





